<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>ComPosiX</title>
<meta name="description" content="POSIX compliant component composition" />
<meta name="keywords"
	content="POSIX,Javascript,AJAX,Concurrency,Events,Internet" />
<meta name="author" content="Jeroen M. Valk" />
<meta name="lang" content="en" />
<meta name="robots" content="all" />
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

<link rel="stylesheet" type="text/css"
	href="ext-4.0.7-gpl/resources/css/ext-all.css" />
<link href="index.css" rel="stylesheet" type="text/css" />

<script type="text/javascript" src="scripts/TypingText.js">
	/****************************************************
	 * Typing Text script- By Twey @ Dynamic Drive Forums
	 * Visit Dynamic Drive for this script and more: http://www.dynamicdrive.com
	 * This notice MUST stay intact for legal use
	 ****************************************************/
</script>
<script type='text/javascript' src='ext-4.0.7-gpl/ext-all-dev.js'></script>
<script type="text/javascript" src="scripts/index.js"></script>
</head>
<body>
	<div id="main_container">
		<div style="height: 37px"></div>
		<div id="header_container">
			<div id="header_content">
				<table>
					<tr>
						<td style="text-align: left"><h1>ComPosiX</h1></td>
						<td style="text-align: right"><h5>POSIX Compliant
								Component Composition</h5></td>
					</tr>
				</table>
			</div>
			<div id="header_bottom"></div>
		</div>
		<div id="content_container">
			<div style="float: left;">
				<div id="demo_top"></div>
				<div id="demo">
					<div id="example1">
						Let's see ComPosix in action on the Triangle of Pascal<sup>1</sup>:
					</div>
					<img src="images/220px-PascalTriangleAnimated2.gif" />
					<div>You can look at the triangle as a dataflow graph where
						the nodes are numbers and data flows along (imaginary) edges
						between adjacent nodes.</div>
					<div>1. This triangle was discovered by Blaise Pascal, a famous mathematician who lived the 17th century AD.</div>
				</div>
				<div id="demo_footer"></div>
			</div>
			<div style="float: left;">
				<div id="content_top"></div>
				<div id="content">
					<p>Though conforming to the good old POSIX standard, ComPosiX
						is a radical new kind of dataflow programming. In dataflow
						programming, software is modelled as a directed graph where data
						flows from node to node along the edges of the graph. Within the
						graph's nodes computations are carried out, while along the edges
						data which is output by one node is simply copied as input for a
						next node. The key to ComPosiX's power is its separation of
						concerns. Indeed, ComPosiX makes it easy to write in your favorite
						programming language, using your favorite IDE. It completely
						respects the fact that:</p>
					<div class="quote">Nodes in a dataflow graph are just
						traditional sequential programs.</div>
					<p>Rather than competing with existing software engineering
						methods on how to best implement sequential programs, ComPosiX is
						only visible at the edges where it is at its best:</p>
					<div class="quote">Edges in a dataflow graph are getting
						sequential programs to communicate and interact with one another.</div>
					<p>The new thing about ComPosiX is that these sequential
						programs should be kept as minimal and simple as possible.
						Traditionally, programmers typically code their applications as
						one large and monolithic sequential program. Communication between
						parts of this program happen from within using synchronous method
						calls, while communication from without is minimized. Such
						sequential programs are rather isolated from the outside world.
						This is perhaps why no one ever complains that POSIX has
						introduced just three standard streams for communication with the
						outside world: standard input, standard output and standard error.
						Moreover, the standard error stream is often ignored, since
						standard output and error are typically both connected to a single
						console.</p>
					<p>Fortunately, POSIX has nothing against using more streams
						than just three standard ones. This is exactly what we do in
						ComPosiX: to boldly go where no programmer has gone before.
						Instead of just counting 0 (the standard descriptor for standard
						input), 1 (descriptor for standard output), and 2 (descriptor for
						standard error), we count on: 3, 4, 5, etc., up until the most
						complex levels of asynchronous interaction. At first, the newcomer
						may not understand us, for our programs often crash complaining
						about dangling file descriptors, e.g.:</p>
					<div class="quote">``bash: i: bad file descriptor'' (where i
						is some integer greater than 2)</div>
					<p>Later, one will realize that it makes no sense to start
						something without a context. Everything is situated, so why would
						that be any different for sequential programs:</p>
					<div class="quote">Sequential programs should exist only if
						being situated in the context of some dataflow graph.</div>
					<p>Functionality, therefore, does not come from within the
						program, but from without. It is the data flow network that is the
						main functionality provider. Each program should ideally only
						provide a small and modest contribution to the network as a whole.
						Each program just takes the responsibility for simple things.
						These small responsibilities then accumulate into high reliability
						and robustness. In the same way as things are organized in our
						modern society.</p>
				</div>
				<div id="content_footer"></div>
			</div>
		</div>
	</div>

	<div id="footer_container">
		<div id="footer_top"></div>
		<table>
			<tr>
				<td style="text-align: right">
					<div id="CPX"></div>
				</td>
			</tr>
		</table>
	</div>
	<script type="text/javascript">
		//Define first typing example:
		new TypingText(document.getElementById("example1"));

		//Define second typing example (use "slashing" cursor at the end):
		//new TypingText(document.getElementById("example2"), 100, function(i){ var ar = new Array("\\", "|", "/", "-"); return " " + ar[i.length % ar.length]; });

		//Type out examples:
		TypingText.runAll();
	</script>
</body>
</html>

